home *** CD-ROM | disk | FTP | other *** search
/ Collection of Tools & Utilities / Collection of Tools and Utilities.iso / batchut / env.zip / ENV.CMP next >
Text File  |  1988-01-27  |  4KB  |  264 lines

  1. n ENV.CMP for assembly by  DEBUG < ENV.CMP
  2. n Purpose: pad/unpad the environment with ENVnn=
  3. n env.com
  4. f 100 500 c3
  5. rcx
  6. 300
  7.  
  8. a 100
  9. ;100
  10.  jmp 2c0
  11. ;103 env address
  12.  db  00 00 'ee'
  13. ;107 envsize
  14.  db 'ss'
  15. ;109 envtop
  16.  db 'tt'
  17. ;10b envptr
  18.  db 'pp'
  19. ;10d mod address
  20.  db  80 00 'mm'
  21. ;111 pad/unpad
  22.  db 00
  23. ;112 testline
  24.  db 'unpad' 00
  25. ;118 found
  26.  db 00
  27.  
  28. a 120
  29.  push ds
  30. ;121                find top COMMAND.COM
  31.  mov ax,[16]
  32.  mov ds,ax
  33.  cmp word ax,[16]
  34.  jne 121
  35. ;12c                find its main environment
  36.  dec ax
  37.  mov ds,ax
  38.  add word ax,[3]
  39.  inc ax
  40.  mov ds,ax
  41.  mov word bx,[3]
  42.  mov cl,4
  43.  shl bx,cl
  44.  inc ax
  45.  pop ds
  46.  mov [109],bx
  47.  mov [107],bx        ;the length in bytes
  48.  mov [105],ax        ;segenv
  49. ;now have env seg/ofs at [105]:[103] 
  50.  les di,[103]
  51.  mov cx,[107]
  52.  mov ax,0
  53. ;156 more repeats
  54.  repne scasb
  55.  dec cx
  56.  scasb
  57.  jne 156 
  58.  mov [10b],cx
  59.  dec di
  60.  mov [109],di
  61.  ret
  62.  
  63. a 170
  64. ;170 string master for entry
  65.  db 'ENV01=abcdefg' 0 0
  66.  
  67. a 180 
  68. ;180                verify structure
  69.  mov  cx,0
  70.  add  cl,[80]
  71.  je   1db            ;quit if no tail
  72.  les  di,[10d]
  73.  add  di,cx
  74.  mov  ax,20
  75.  std
  76.  repe scasb
  77.  je   1db            ;quit if all space
  78.  inc  cx
  79.  mov  di,81
  80.  cld
  81.  repe scasb
  82.  inc  cx
  83.  mov  [80],cl        ;length of trimmed string
  84.  dec  di
  85.  mov  [10d],di        ;posn of first char
  86.  mov  al,[di]
  87.  or   al,20
  88.  mov  [111],al      ;record of first letter
  89.  lds  si,[10d]
  90.  mov  bp,113
  91.  cmp  cl,3
  92.  je   1c3
  93.  mov  bp,111
  94.  cmp  cl,5
  95.  jne  1db
  96. ;1c3  loop
  97.  lodsb
  98.  inc  di
  99.  inc  bp
  100.  or   al,20
  101.  cmp  al,[bp]
  102.  loope 1c3
  103.  jne  1db
  104.  mov  ax,170
  105.  mov  [10d],ax
  106.  mov  al,[111]
  107.  clc
  108.  jmp  1dc
  109. ;1db not ok
  110.  stc
  111. ;1dc exit
  112.  ret
  113.  
  114. a 1df
  115. ;1df pad sequentially with ENV01, ENV02, until full
  116.  call 200
  117.  jc   1dc
  118.  call 26e
  119.  inc byte [174]
  120.  cmp byte [174],3a
  121.  jne 1df
  122.  inc byte [173]
  123.  mov al,30
  124.  mov [174],al
  125.  jmp 1df
  126.  
  127. a 200
  128. ;200 find size of present entry
  129.  cld
  130.  les  di,[10d]        ;find length of LHS
  131.  mov  cx,di
  132.  mov  al,3d
  133.  repne scasb
  134.  sub  di,cx
  135.  ror  di,1
  136.  dec  di
  137.  mov  bx,di
  138. ;212                 search the environment for match
  139.  mov  cx,[109]
  140.  lds  si,[10d]
  141.  les  di,[103]
  142.  inc  si
  143. ;21f  loop for main search
  144.  dec  si
  145.  lodsb
  146.  repne scasb
  147.  push cx
  148.  push si
  149.  push di
  150.  mov  cx,bx
  151.  repe cmpsb
  152.  pop di
  153.  pop si
  154.  pop cx
  155.  jcxz 25f
  156.  jne 21f
  157. ;231  search for end
  158.  mov si,di
  159.  mov bx,cx
  160.  mov ax,0
  161.  repne scasb
  162.  sub bx,cx
  163.  xchg si,di
  164.  cs: mov ax,[109]
  165.  sub ax,bx
  166.  cs: add ax,F
  167.  dec ax
  168.  cs: cmp [107],ax
  169.  jc  26a
  170.  push es
  171.  pop  ds
  172.  dec  di
  173.  inc  cx
  174.  rep  movsb
  175.  dec  di
  176.  cs: mov [109],di
  177.  clc
  178.  jmp  26a
  179. ;25f
  180.  push cs
  181.  pop  ds
  182.  mov  ax,di
  183.  add  ax,F
  184.  cmp  [107],ax
  185. ;26a 
  186.  ret
  187.  
  188. a 26e
  189. ;26e add new entry
  190.  cs: mov cl,F
  191.  cs: lds si,[10d]
  192.  mov bx,cx
  193.  rep movsb
  194.  dec di
  195.  mov [109],di
  196.  ret
  197.  
  198. a 280
  199. ;280 unpad
  200.  mov ax,[107]
  201.  mov bx,e
  202.  div bl
  203.  inc ax
  204.  mov [117],al
  205. ;28c unpad loop
  206.  call 200
  207.  push cs
  208.  push cs
  209.  pop  ds
  210.  pop  es
  211.  jnc  297
  212.  jmp  2b1
  213. ;297
  214.  inc byte [174]
  215.  cmp byte [174],3a
  216.  jne 2ab
  217.  inc byte [173]
  218.  mov al,30
  219.  mov [174],al
  220. ;2ab
  221.  dec byte [117]
  222.  jne 28c
  223. ;2b1
  224.  ret
  225.  
  226. a 2c0
  227. ;2c0            MAIN PROGRAMME
  228.  mov  [10f],cs ;mod address for LDS/LES calls
  229.  call 120      ;find envbase and envsize
  230.  call 180      ;check validity of mod format
  231.  jnc  2ce      ;if not valid ...
  232.  jmp  2e0      ;... exit via syntax (err #1)
  233. ;2ce           
  234.  cmp  al,70    ;if not pad ...
  235.  jne  2d7      ;... goto unpad
  236.  call 1df      ;pad ...
  237.  jmp  2da      ;... and exit
  238. ;2d7           ;unpad
  239.  call 280
  240. ;2da           ;exit OK (err #0)
  241.  mov  al,0
  242. ;2dc
  243.  mov  ah,4c    ;standard exit from programme
  244.  int21
  245. ;               END OF MAIN PROGRAMME
  246.  
  247. a 2e0
  248.  mov  ah,9     ;print syntax and exit
  249.  mov  dx,300
  250.  int  21
  251.  mov  al,1
  252.  jmp  2dc     
  253.  
  254. a 300
  255. ;300
  256.  db 0a 0d 'Syntax: env pad|unpad' 0d 0a 24
  257.  db '(C) 1988 Hylton Boothroyd, University of Warwick$' 0a 0d
  258.  db 'Purpose: pad the environment with ENVnn variables,'0a 0d
  259.  db 'or delete all ENVnn variables assumed to start with ENV01$'
  260.  
  261. w
  262. q
  263.  
  264.